package Managment;

import java.util.ArrayList;
import java.util.List;

import NegocioVO.ComandaVO;
import NegocioVO.PlatoVO;
import bean.IngredienteBean;
import bean.PlatoBean;
import dao.MovimientoStockDao;
import dao.PlatoDao;


public class ManagmentPlato {
	
	private static ManagmentPlato instancia;
	
	public static ManagmentPlato getInstancia(){
		if(instancia == null)
			instancia = new ManagmentPlato();
		return instancia;
	}

	
	public List<ComandaVO> listarPlatosDisponibles(int Local)
	{
		List<PlatoBean> platoB = new ArrayList<PlatoBean>();
		MovimientoStockDao movid = new MovimientoStockDao();
		List<ComandaVO> comandasaDevo = new ArrayList<ComandaVO>();
		PlatoDao platoD = new PlatoDao();
		int cantidadIngre = 0;
		int cantidadProdu = 0;
		int productoId = 0;
		int min = 0; //valor minimo de la comanda que podes pedir
		List<Integer> cantIngre = new ArrayList<Integer>(); 
		platoB.addAll(platoD.listaPlatoDelLocal(Local));
		
		for(int i = 0; platoB.size() - 1 >= i; i++)
		{
			List<IngredienteBean> ingb = new ArrayList<IngredienteBean>();
			ingb.addAll(platoB.get(i).getReceta().getIngredientes());
			String area = platoB.get(i).getTipo();
			int areaId = platoD.buscarAreaId(Local,area);
			for(int j = 0; ingb.size() - 1 >= j; j++)
			{
				productoId = ingb.get(j).getProducto().getIdProducto();
				cantidadIngre = ingb.get(j).getCantidad();
				cantidadProdu = movid.BuscarCantProdu(productoId,areaId);
				if (cantidadProdu < cantidadIngre)
				{
					cantIngre.add(0);
				}
				else
				{
					cantIngre.add(cantidadProdu/cantidadIngre);
				}
				
			}
			min = (Integer) ManagmentPlato.min(cantIngre);
			if (min > 0)
			{
				ComandaVO co = new ComandaVO();
				co.setPlato(this.HibernateAVo(platoB.get(i)));
				co.setCantidad(min);
				comandasaDevo.add(co);
			}
		}
		return comandasaDevo;
	}

	private List<PlatoVO> ListHibernateaVo(List<PlatoBean> platoB) 
	{
		List<PlatoVO> platosVO = new ArrayList<PlatoVO>();
		for(int i = 0; platoB.size() - 1 >= i; i++)
		{
			platosVO.add(this.HibernateAVo(platoB.get(i)));
		}
		return platosVO;
	}

	private PlatoVO HibernateAVo(PlatoBean platoBean) {
		PlatoVO platovo = new PlatoVO();
		platovo.setComisionExtra(platoBean.getComisionExtra());
		platovo.setDescripcion(platoBean.getDescripcion());
		platovo.setIdPlato(platoBean.getIdPlato());
		platovo.setIsActivo(platoBean.getIsActivo());
		platovo.setPrecio(platoBean.getPrecio());
		platovo.setReceta(ManagmentReceta.getInstancia().HibernateAVo(platoBean.getReceta()));
		platovo.setTipo(platoBean.getTipo());
		return platovo;
	}


	public PlatoBean VoAHibernate(PlatoVO plato) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public static Object min(List lista){

		            Object minimo = lista.get(0);

		           for (Object elemento : lista) {

		               Comparable comparable = (Comparable) elemento;

		              if (comparable.compareTo(minimo)==-1){

		                  minimo = comparable;

		                }

		          }

		           return minimo;

		       }
}
